#ifndef __IIC_H
#define __IIC_H

#include <stdint.h>
#include "stm32f1xx.h"
#include "delay.h"


#define ACK 0
#define NACK 1

#define SCL_HIGHT (GPIOB->ODR |= GPIO_ODR_ODR10_Msk)
#define SCL_LOW (GPIOB->ODR &= ~GPIO_ODR_ODR10_Msk)
#define SDA_HIGHT (GPIOB->ODR |= GPIO_ODR_ODR11_Msk)
#define SDA_LOW (GPIOB->ODR &= ~GPIO_ODR_ODR11_Msk)

#define READ_SDA (GPIOB->IDR & GPIO_IDR_IDR11_Msk)

// 定义操作的 基本延迟  100khz = 1/1000000 s = 10us
#define IIC_DELAY delay_us(10)

// IIC 初始化
void IIC_Init(void);

// 起始信号
void IIC_Start(void);

// 停止信号
void IIC_Stop(void);

// 主机发出应答信号
void IIC_SendACK(void);

// 主机发出非应答信号
void IIC_SendNACK(void);

// 主机接收应答信号
uint8_t IIC_ReceiveACK(void);

// 主机发送一个字节的数据
void IIC_SendByte(uint8_t byte);

// 主机接收一个字节的数据
uint8_t IIC_ReceiveByte(void);

#endif